package com.wjy.sfhcore.util;

import com.alibaba.fastjson.JSON;
import com.wjy.sfhcore.engine.HttpUtil;

import org.json.JSONException;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 数据处理工具类
 * 
 * @author wjy
 * 
 */
public class DataUtil {

	/**
	 * Get请求
	 * 
	 * @param url
	 *            接口地址
	 * @param params
	 *            Header参数
	 * @return
	 */
	public String getJsonResult(String url, Map<String, String> params) {
		try {
			return HttpUtil.getInstance().httpGet(url, params);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * Get方式获取数据
	 * 
	 * @param <T>
	 *            泛型对象
	 * @param url
	 *            接口地址
	 * @param params
	 *            Header参数
	 * @param cls
	 *            类对象
	 * @return
	 */
	public <T> T getJsonResult(String url, Map<String, String> params,
			Class<T> cls) {
		T t = null;
		String result = getJsonResult(url, params);
		if (!Tools.isEmpty(result)) {
			t = getData(result, cls);
		}
		return t;
	}

	public <T> T getJsonResult(String url, Class<T> cls) {
		T t = null;
		String result = getJsonResult(url, new HashMap<String, String>());
		if (!Tools.isEmpty(result)) {
			t = getData(result, cls);
		}
		return t;
	}

	/**
	 * Post请求
	 * 
	 * @param url
	 *            接口地址
	 * @param params
	 *            Header参数
	 * @param obj
	 *            Body对象
	 * @return
	 */
	public String postJsonResult(String url, Map<String, String> params,
			Object obj) {
		try {
			return HttpUtil.getInstance().httpPost(url, params, obj);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 上传文件
	 * 
	 * @param url
	 *            地址
	 * @param params
	 *            Header参数
	 * @param bodyParams
	 *            Body参数
	 * @param filePath
	 *            文件路径
	 * @return
	 */
	public String postJsonResult(String url, Map<String, String> params,
			Map<String, String> bodyParams, String filePath) {
		try {
			return HttpUtil.getInstance().httpPost(url, params, bodyParams,
					filePath);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * POST方式获取数据
	 * 
	 * @param <T>
	 *            泛型对象
	 * @param url
	 *            接口地址
	 * @param params
	 *            Header参数
	 * @param obj
	 *            body对象
	 * @param cls
	 *            类对象
	 * @return
	 */
	public <T> T postJsonResult(String url, Map<String, String> params,
			Object obj, Class<T> cls) {
		T t = null;
		try {
			String jo = HttpUtil.getInstance().httpPost(url, params, obj);
			if (!Tools.isEmpty(jo)) {
				t = getData(jo.toString(), cls);
			}
		} catch (JSONException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return t;
	}

	/**
	 * POST方式获取数据（上次文件）
	 * 
	 * @param <T>
	 *            泛型对象
	 * @param url
	 *            接口地址
	 * @param params
	 *            Header参数
	 * @param b
	 *            文件字节数组
	 * @param cls
	 *            类对象
	 * @return
	 */
	public <T> T postJsonResult(String url, Map<String, String> params,
			byte[] b, Class<T> cls) {
		T t = null;
		try {
			String jo = HttpUtil.getInstance().httpPost(url, params, b);
			if (!Tools.isEmpty(jo)) {
				t = getData(jo.toString(), cls);
			}
		} catch (JSONException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return t;
	}

	/**
	 * 将JSON字符串转化成对象
	 * 
	 * @param <T>
	 * @param result
	 * @param cls
	 * @return
	 */
	public <T> T getData(String result, Class<T> cls) {
		try {
			return JSON.parseObject(result, cls);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 将字符串转化成对象集合
	 * 
	 * @param result
	 * @return
	 */
	public <T> List<T> getListData(String result, Class<T> cls) {
		try {
			return JSON.parseArray(result, cls);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

}
